package com.huantai.common.util;

import java.io.UnsupportedEncodingException;

import com.huantai.common.enums.CharsetEnum;
import com.huantai.common.exception.SystemException;

/**
 * 字符集工具类
 * 
 * @author Ma Chao
 * @version 2018年4月3日 下午5:08:53
 */
public final class CharsetUtil {
    /** 不允许使用对象来调用工具类的方法 */
    private CharsetUtil() {}

    /**
     * 将字符编码转换成目标格式码
     * 
     * @Title: changeCharset
     * @param str 要转换的字符串
     * @param charset 目标格式码
     * @return 转换后的字符串
     */
    public static String changeCharset(String str, CharsetEnum charset) {
        if (!StringUtil.isEmpty(str)) {
            try {
                // 用默认字符编码解码字符串。
                byte[] byteArray = str.getBytes();
                // 用新的字符编码生成字符串
                return new String(byteArray, charset.getValue());
            } catch (UnsupportedEncodingException e) {
                throw new SystemException("不支持的字符编码");
            }
        }
        return null;
    }

    /**
     * 将字符编码从旧的格式码转换成新的格式码
     * 
     * @Title: changeCharset
     * @param str 要转换的字符串
     * @param oldCharset 旧的格式码
     * @param newCharset 新的格式码
     * @return 转换后的字符串
     */
    public static String changeCharset(String str, CharsetEnum oldCharset, CharsetEnum newCharset) {
        if (!StringUtil.isEmpty(str)) {
            try {
                // 用旧的字符编码解码字符串。解码可能会出现异常。
                byte[] byteArray = str.getBytes(oldCharset.getValue());
                // 用新的字符编码生成字符串
                return new String(byteArray, newCharset.getValue());
            } catch (UnsupportedEncodingException e) {
                throw new SystemException("不支持的字符编码");
            }
        }
        return null;
    }
}
